define(function(require, exports){
	var pubjs	= require('pubjs');
	var view	= require('@base/view');
	var util	= require('util');
	var subDropdown = require('@base/common/dropdown').subDropdown;
	var $		= require('jquery');

	var rvd = pubjs.config('RAIDO_VALUE_DEFINE');
	var PREMIUM_RULE_TYPE = pubjs.config("CONST/PREMIUM_RULE_TYPE");

	var addAccount = view.container.extend({
		init: function(config, parent){
			var user = pubjs.getUserCurrent();
			var sunfeiAccount = checkRight('administrator.sunfei');
			var hasDepositRight = checkRight('sunfei.deposit');
			var hasContractRight = checkRight('sunfei.contract');
			var hasValidDateRight = checkRight('sunfei.validDate');
			var hasConnectedRight = checkRight('sunfei.isConnected');
			//是否有设置溢价部分的权限
			var hasSetPremium = checkRight('user.setPremium');
			config = pubjs.conf(config, {
				'param': null,							// 请求参数，token等信息
				'class': 'P-info',
				'urlInfo': 'user/info',		// 拉取用户基本信息地址
				'urlSave': 'user/add',		// 保存数据地址
				'tplFile':	'/tpl/account/add.html',
				'view_model': {
					email: ''
					,'type': true
					,'showType': sunfeiAccount
					,'showExplain': !sunfeiAccount
					,'companyName': ''
					,'pass': ''
					,'deposit': 0
					,'hasDeposit': false
					,'creditRatio': 0
					,'creditPh': '0'
					,'creditLimit': ''
					,'depositWarn': ''
					,'hasContract': false
					,'IsSignValidate': false
					,'showIsSignValidate': this.onShowIsSignValidate
					,'contractCode': ''
					,'costRateTmp': 0
					,'AccurateFrequency': 0
					,'warnColor': 'black'
					,'showRule': this.onShowRule
					,'showMoreRule': false
					,'hasDepositRight': hasDepositRight		//是否有设置保证金的权限
					,'hasContractRight': hasContractRight	//是否有设置合同的权限
					,'hasValidDateRight': hasValidDateRight	//是否设置有效期的权限
					,'hasConnectedRight': hasConnectedRight //是否有设置对接情况的权限
					// 设置溢价
					,'hasSetPremium': hasSetPremium
					// RTBAsia反作弊最低分数
					,'atLeastScore': 50
					,'hasSuperDsp': user.Version === 0
					,'DspVersion': user.Version === 0
					,'Contact': ''
					,'Phone': ''
 				}
			});

			this.$id = null;
			this.$cacheCategories = {};
			this.$categoriesMap = {};
			this.Super('init', arguments);
		},
		afterBuild: function(){
			var self = this;

			self.vm.watch('creditRatio', self.onCreditChange.bind(self));

			var now = util.date('Y-m-d');
			var end = util.date('Y-m-d',31449600);
			var config = {
				'companyTips': {
				},
				'startDay': {
					'value': now,
					'max': end
				},
				'endDay':{
					'value': end,
					'min': now
				},
				'validDay':{
					'no_date': LANG('不限')
				},
				'agentHelp': {
					'data': LANG('公司类型分为代理和直客：代理可以添加下属直客账号，直客则不能'),
					'width': '200'
				},
				'chargeRulesHelp': {
					//'data': LANG('暂时支持按溢价收费。如溢价20%。同一个渠道/域名/广告位，不能设置不同的收费规则。'),
					'data': LANG('暂时支持按溢价收费。如溢价20%。'),
					'width': '200'
				},
				'contractHelp': {
					'data': LANG('一旦超过合同有效期，账号将被禁用，不得投放广告')
				},
				'rule':{
					// 溢价类型,  1 - 比例溢价, 2 - 固定CPM溢价, 3 - 固定CPC溢价, 4 - 固定CPA溢价
					'options': pubjs.config("CONST/PREMIUM_RULE"),
					'width': 120,
					'def': LANG('选择项目'),
					'value': PREMIUM_RULE_TYPE.COMMON, // 默认选1
					'panel_config': {
						'hasSearch': false
					}
				},
				'adxIds':{
					'items': pubjs.config('exchange'),
					'full': true,
					'view_model': {
						'items': [],
						'prefix': 'wh',
						'id': 'id',
						'name': 'name'
					}
				},
				'industry':{
					'def': LANG('选择行业分类'),
					'url': 'category/industry',
					'reqType': 'websocket',
					'skey': 'children',
					'name': 'Name',
					'key': 'BdxId',
					'canSelectParent': false,
					// 'all': {Name: LANG('无'), BdxId: 0},
					'width': 250,
					'panel_config': {
						'height': 300
					}
				},
				'category':{
					'def': LANG('选择行业类别'),
					'option_height': 130,
					'width': 250,
					'search':false,
					'isPopUp': false,
					'url': 'category/industrySort',
					'reqType': 'websocket',
					'name': 'Name',
					'key': 'BdxId'
				},
				'moreRule':{},
				'save': {
					'value': LANG('保存'),
					'class': 'btn btn-confirm mt10'
				},
				'reset': {
					'value': LANG('重置'),
					'class': 'btn btn-link mr10 mt10'
				},
				'frequency': {
					'isCustomer': true
				},
				'currency': {
					'url':'category/currency',
					'hasTitle':'请选择你需要充值的货币',
					'hasCancelBtn':true,
					'hasEvent':true,
					'def': LANG('选择类型'),
					'width': 200,
					//'value': 1,
				},
			};


			self.buildFromTemplate(config);
			var el = self.getDOM();
			self.$chargeUnit = el.find('.chargeUnit');
			self.showLoading();
		},
		afterBuildTemplate: function(){
			this.hideLoading();
		},
		load: function(id){
			var urlInfo = this.getConfig().urlInfo;
			if(id){
				pubjs.loading.show();
				pubjs.mc.send(urlInfo, {
					'_id': +id
				},this.onData.bind(this));
			}
		},
		onData: function(err, data){
			pubjs.loading.hide();
			if(err){
				pubjs.alert(err.message);
				return false;
			}

			this.vm.$.hasSuperDsp = false;

			this.setData(data);
			return false;
		},
		// 下拉框选项选中事件
		onDropChange: function(ev){
			if(ev.name == 'rule'){
				var unit_el = this.$chargeUnit;
				var id = ev.param.id;
				switch (+id){
					case PREMIUM_RULE_TYPE.COMMON:
						unit_el.text('%');
						break;
					default:
						unit_el.text(LANG('元'));
				}
			}
			return false;
		},
		onCreditChange: function(newV,oldV){
			var self	= this;
			var vm		= self.vm.$;
			var color	= 'black';
			var tmp;	//额度值.
			var sn;	//标准大写

			if(util.isNumber(newV)){
				if(parseInt(newV, 0) === newV){
					tmp = LANG('【系数不能为小数】');
				}
				else {
					if(+newV > 99999){
						tmp = LANG('【系数过大】');
					}else if(+newV < -99999){
						tmp = LANG('【系数过小】');
					}else{
						tmp = vm.deposit * (+newV);
					}
					sn	= pubjs.standarNumber(newV);
				}
			}
			else {
				sn		= LANG('非法输入!');
				color	= 'red';
				tmp		= LANG('【输入有误】');
			}
			self.vm.setItem('creditLimit', tmp);
			self.vm.setItem('depositWarn', sn);
			self.vm.setItem('warnColor', color);
		},
		onShowRule: function(){
			var show = this.vm.getItem('showMoreRule');
			this.vm.setItem('showMoreRule',!show);
		},
		getData: function(){
			var self	= this
				,ch		= this.$
				,vm		= self.vm.$;
			//信用系数
			vm.creditRatio = vm.hasDeposit ? vm.creditRatio : 0;
			var premium = [];
/*			if(vm.showMoreRule){
				premium = ch.moreRule.getData();
			}*/

			var result = {
				'UserId'				: self.$id,
				'UserName'				: vm.companyName,
				'Type'					: vm.type ? 2:1,
				'ValidDate'				: ch.validDay.getData(true) || 0,   //时间戳
				'IsSign'				: vm.hasContract,		//标志是否有合同选项.
				'IsSignValidate'		: vm.IsSignValidate,	//标志是否启用合同有效期.
				'CostRateTmp'			: vm.costRateTmp,	//costRate , costRateTmp 要怎样处理.
				'IsCredit'				: vm.hasDeposit,	//是否可充保证金
				'CreditIndex'			: vm.creditRatio,	//信用系数
				'Premium'				: {			//溢价策略
					'UserRate'			: +vm.costRateTmp || 0,
					'Rule'				: +ch.rule.getValue(true).id || 1
				},
				'Contract'				: {					//合同
					'Num'				: vm.contractCode,
					'Start'				: ch.startDay.getData(true),		 //时间戳
					'End'				: ch.endDay.getData(true) || 0		//时间戳
				},
				'Industry'              : ch.industry.getData(),
				// 精确频次控制
				'AccurateFrequency'     : vm.AccurateFrequency ? 1 : 0,
				// RTBAsia反作弊是否开启
				'RTBAsiaAntiFraud'		: {
					'Open'				: vm.rtbAsiaRadio
				},
				'Version'				: vm.DspVersion ? 'senior' : 'brand',
				'Phone'                 : vm.Phone,
				'Contact'               : vm.Contact,
			};

			// 行业分类
			result.FullIndustry = this.$.industry.getValue() || [];
			result.Industry = +result.FullIndustry[result.FullIndustry.length-1];
			// 行业类别
			result.Category = this.$.category.getValue(true).id || 0;
			// 渠道
			result.AdxIds = this.$.adxIds.getValue();
			//货币
			if (ch.currency){
				result.Currency = +ch.currency.getValue().id || 1;
			}
			return result;
		},
		setData: function(data){
			var vm = this.vm.$,
				ch = this.$;

			// 类型
			this.$id = data.UserId;
			vm.type = data.Type == 2;
			// 名称
			vm.companyName = data.Name;
			// 联系人，电话
			vm.Phone = data.Phone || '';
			vm.Contact = data.Contact || '';
			//todo 收费
			if(data.Finance.Credit.IsCredit){
				//保证金
				vm.hasDeposit	= data.Finance.Credit.IsCredit;
				// 信用系数
				vm.creditRatio	= +data.Finance.Credit.Index;
				// 保证金
				vm.deposit	= +data.Finance.Credit.Security;
				// 信用额度
				vm.creditLimit	= +data.Finance.Credit.AllowAdCredit;
			}

			//合同
			vm.hasContract	= data.Finance.IsSign;
			if(data.Finance.Contract){
				//编号
				vm.contractCode	= data.Finance.Contract.Num || '';
				//时间戳转换
				var Start = data.Finance.Contract.Start ? util.date('Y-m-d', data.Finance.Contract.Start) : 0;
				var End = data.Finance.Contract.End ? util.date('Y-m-d', data.Finance.Contract.End) : 0;
				//开始时间
				ch.startDay.setData(Start);
				//结束时间
				ch.endDay.setData(End);
			}

			if(data.Finance.IsSignValidate){
				vm.IsSignValidate = data.Finance.IsSignValidate;
			}
			// 有效期
			if(data.ValidDate){
				//时间戳转换
				var ValidDate = util.date('Y-m-d', data.ValidDate);
				ch.validDay.setData(ValidDate);
			}

			// 溢价
			if(data.Premium) {
				ch.rule.setValue(data.Premium.Rule);
				vm.costRateTmp = data.Finance.CostRateTmp;
				//更多规则
/*				if(data.Premium.data && data.Premium.data.length){
					//vm.showMoreRule = true;
					//ch.moreRule.setData(data);
				}*/
			}

			ch.category.setValue(data.Category);
			ch.industry.setValue(data.FullIndustry||[]);
			ch.adxIds.setValue(data.AdxIds || []);
			//货币类型
			if (data.Currency){
				ch.currency.setValue(data.Currency);
			}
			
			ch.currency.disable();
		},
		setTitle: function(title){
			var el = this.getDOM().find('.M-formHeadTitle');
			if(title){
				el.text(title);
			}
			return this;
		},
		onInputClick: function( ev ) {
			var type = ev.name;
			switch( type ) {
				case 'cancel':
					// pubjs.alert('取消');
					break;
				case 'save':
					this.save();
					break;
				case 'reset':
					this.reset();
					break;
			}
		},
		save: function() {
			var vm = this.vm.$;
			//保证取消可充值保证金时，该用户的保证金为0
			if(!vm.hasDeposit && vm.deposit){
				pubjs.alert('该用户保证金不为0，不能取消可充值保证金选项');
				return false;
			}

			var data = this.getData();

			if(this.validate(data)){
				pubjs.loading.show();
				pubjs.mc.send(this.getConfig('urlSave'),data, this.onSave.bind(this));
			}
		},
		validate: function(data){
			if (data.UserName === ''){
				pubjs.alert(LANG('请先填写公司的名称'));
				return false;
			}
			if (!data.Currency){
				pubjs.alert(LANG('请选择货币类型'));
				return false;
			}
			if(data.IsCredit && !util.isNumber(data.CreditIndex)){
				pubjs.alert(LANG('信用系数，请输入数字！'));
				return false;
			}
			if(data.IsCredit && data.CreditIndex > 5000000){
				pubjs.alert(LANG('信用系数过大，请重新输入！'));
				return false;
			}
			if(data.IsCredit && data.CreditIndex < 0){
				pubjs.alert(LANG('信用系数不能小于0，请重新输入！'));
				return false;
			}
			if(data.IsCredit && data.CreditIndex != parseInt(data.CreditIndex, 10)) {
				pubjs.alert(LANG('信用系数不能为小数，请重新输入！'));
				return false;
			}

			if(data.IsSign && data.Contract.Num ==='' ){
				pubjs.alert(LANG('请输入合同编号'));
				return false;
			}

/*			if(data.Premium && this.$.moreRule.checkIsRepeat(data.Premium.data)){
				pubjs.alert(LANG('同一个渠道/域名/广告位，不能设置不同的收费规则'));
				return false;
			}*/

/*			if(data.Premium && this.$.moreRule.checkValue(data.Premium.data))
			{
				pubjs.alert(LANG('高级收费规则请设置为正整数'));
				return false;
			}*/

			if(!data.Contact) {
				pubjs.alert(LANG('请输入联系人信息'));
				return false;
			}

			if(!data.Phone) {
				pubjs.alert(LANG('请输入联系电话'));
				return false;
			}

			if(!data.Category){
				pubjs.alert(LANG('请选择行业类别'));
				return false;
			}

			if(!data.FullIndustry.length){
				pubjs.alert(LANG('请选择行业分类'));
				return false;
			}

			return true;
		},
		// 渲染下拉框
		renderCategories: function(sels, dom){
			var html = [];
			for(var i in sels){
				html.push(sels[i].Name);
			}
			return html.join(' / ');
		},
		onSave:function( err, data ) {
			pubjs.loading.hide();
			if( err ) {
				pubjs.error(err.message);
				pubjs.alert(err.message);
				return false;
			}else {

				if(!data.afterSaveSuccess){
					//基本信息保存成功，但是后续关联操作没保存成功，提示后续操作错误的提示
					pubjs.alert(data.afterSaveMessage);
				}
				// 回跳到UserCenter界面
				if(this.$id) {
					this.reset();
					pubjs.alert(LANG('保存成功'));
					pubjs.controller.navigate('admin/customer');
					return false;
				}
				window.location.href = data.url;
			}
		},
		onShowIsSignValidate: function(){
			var vm = this.vm.$;
			var ch = this.$;
			if(vm.IsSignValidate){
				var end = ch.endDay.getData() || 0;
				ch.validDay.setData(end);
			}
			return false;
		},
		reset: function(){
			var self = this;
			self.vm.reset();
			var ch = self.$;
			ch.rule.reset();
			//ch.moreRule.reset();
			this.$categoriesMap = {};
			return this;
		},
		// 判断数字是否为整数
		isInteger: function(number){
			var regx = /^-?\d+$/;
			if (number) {
				return regx.test(number);
			}
			else {
				return false;
			}
		}
	});
	exports.base = addAccount;

	function checkRight(right){
		return pubjs.checkRight(right) ? true : false;
	}
});